home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / asmbler.arc / DDI.ASM < prev    next >
Assembly Source File  |  1988-11-19  |  2KB  |  63 lines

  1. CLIP    EQU     0
  2. assume  cs:ddi
  3. ddi     segment para public 'code'
  4. public  ddinf, ddisb
  5.  
  6. include dos.inc
  7.  
  8.  
  9.         db      "<<DDISB>>"     ; for debug purposes
  10.  
  11. MINx    equ     0               ; screen extents
  12. MAXx    equ     967             ; " "
  13. MINy    equ     0               ; " "
  14. MAXy    equ     511             ; " " 
  15.  
  16. kx      equ     [bp+8]          ; stack frame argument positions
  17. ky      equ     [bp+6]
  18.  
  19. ddisb   proc    far             ; ddisb (kx,ky : integer) { set bit at kx,ky }
  20.         push    bp              ; save bp
  21.         mov     bp,sp           ; bp is now base pointer to stack frame (args)
  22.         push    cx              ; save registers
  23.         push    dx              ; save registers
  24.         mov     cx,kx           ; column number
  25.         mov     dx,ky           ; row number
  26. IF CLIP
  27.         cmp     cx,MINx         ; check for MINx <= kx <= MAXx
  28.         jb      noplot
  29.         cmp     cx,MAXx
  30.         ja      noplot
  31.         cmp     dx,MINy         ; check for MINy <= kx <= MAXy
  32.         jb      noplot
  33.         cmp     dx,MAXy
  34.         ja      noplot
  35. ENDIF
  36.         push    ax              ; save register
  37.         mov     al,81h          ; want exclusive-OR with current color
  38.         mov     ah,$VIDEO_SETDOT ; code to set a dot in video map
  39.         int     $VIDEO          ; set the dot
  40.         pop     ax              ; restore register
  41. noplot:                         ; skip here if (kx,ky) out of range
  42.         pop     dx              ; restore register
  43.         pop     cx              ; restore register
  44.         pop     bp              ; restore bp
  45.         ret     4               ; return to caller, popping 2 args
  46. ddisb   endp
  47.  
  48.         db      "<<DDINF>>"     ; for debug purposes
  49.  
  50. ddinf   proc    far             ; ddinf; {new frame - clear screen}
  51.         push    ax
  52.         mov     al,8            ; QS mode
  53.         mov     ah,$VIDEO_SETMODE
  54.         int     $VIDEO
  55.         mov     ah,18           ; QS clear screen function code
  56.         int     $VIDEO          ; clear the screen
  57.         pop     ax
  58.         ret                     ; return to caller
  59. ddinf   endp
  60.  
  61. ddi     ends
  62.         end
  63.